{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * same as run 2, longer training, slight hparam tweaks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/vetting_base_1_run_3/1/AstroCNNModelVetting_base_20210905_202359',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_3/2/AstroCNNModelVetting_base_20210905_205903',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_3/3/AstroCNNModelVetting_base_20210905_213436',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_3/4/AstroCNNModelVetting_base_20210905_220956',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_3/5/AstroCNNModelVetting_base_20210905_224539',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_3/6/AstroCNNModelVetting_base_20210905_232023',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_3/7/AstroCNNModelVetting_base_20210905_235606',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_3/8/AstroCNNModelVetting_base_20210906_003150']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/vetting_base_1_run_3'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-vetting-1-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-vetting-v1-val.csv'\n",
    "\n",
    "nruns = 8\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 2\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 3\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 4\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 5\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 6\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 7\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 8\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_p', 'disp_e', 'disp_n']\n",
    "\n",
    "col_p = labels.index('disp_p')\n",
    "thresh = config.hparams.prediction_threshold\n",
    "thresh = 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_p] >= thresh:\n",
    "            agg_preds[tic_id].append('disp_p')\n",
    "        else:\n",
    "            masked_v = [v if i != col_p else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.5789473684210527\n",
      "Precision: 0.3548387096774194\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_p_p'] > 0)\n",
    "pos = (pl['disp_p'] > 0)\n",
    "\n",
    "pneg = (pl['disp_p_p'] == 0)\n",
    "neg = (pl['disp_p'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "120199940\n",
      "293962038\n",
      "29984131\n",
      "91576611\n",
      "283156726\n",
      "395171208\n",
      "127722285\n",
      "357719182\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24491836\n",
      "276936320\n",
      "280095254\n",
      "304729846\n",
      "344978642\n",
      "384068226\n",
      "384744828\n",
      "424876542\n",
      "61802871\n",
      "142963071\n",
      "365494323\n",
      "388076435\n",
      "149854222\n",
      "250475499\n",
      "28016860\n",
      "321828403\n",
      "457138169\n",
      "202444594\n",
      "1715469662\n",
      "1715469667\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_p</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>1.082629e-03</td>\n",
       "      <td>0.998636</td>\n",
       "      <td>9.217201e-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>1.156384e-05</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>4.568896e-08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>4.027746e-07</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.954941e-09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>7.102227e-09</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>5.915018e-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>1.702433e-08</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>8.939638e-10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>5.207366e-07</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.275813e-08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>1.766130e-07</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.016924e-08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>4.308337e-06</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>8.589554e-08</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 disp_p    disp_e        disp_n\n",
       "tic_id                                         \n",
       "278866211  1.082629e-03  0.998636  9.217201e-11\n",
       "278866211  1.156384e-05  1.000000  4.568896e-08\n",
       "278866211  4.027746e-07  1.000000  6.954941e-09\n",
       "278866211  7.102227e-09  1.000000  5.915018e-11\n",
       "278866211  1.702433e-08  1.000000  8.939638e-10\n",
       "278866211  5.207366e-07  1.000000  1.275813e-08\n",
       "278866211  1.766130e-07  1.000000  1.016924e-08\n",
       "278866211  4.308337e-06  1.000000  8.589554e-08"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 278866211)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_p_p</th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_p</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>375506058</th>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           disp_p_p  disp_e_p  disp_n_p  maxcount  disp_p  disp_e  disp_n\n",
       "tic_id                                                                   \n",
       "375506058         1         7         0         7       1       0       0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 375506058]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_ps = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_p = row[0], row[1][col_p]\n",
    "        pred_ps[i][tic_index[tic]] = pred_p\n",
    "\n",
    "lbl_ps = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_p = row[0], row[1]['disp_p']\n",
    "    if tic in tic_index:\n",
    "        lbl_ps[tic_index[tic]] = (lbl_p > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_ps))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_ps >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_ps\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.2165029738258564, max R: 1.0, max P: 0.4375\n",
      "100% recall at: 13%, threshold: 5.4626442258509655e-14\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_ps)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
